package se.webbzon.boltzmann.editor.factory.propertyframe;

import java.util.Collection;

import se.webbzon.boltzmann.editor.component.itemlist.ItemList;
import se.webbzon.boltzmann.editor.mvc.EditorModel;
import se.webbzon.boltzmann.editor.propertyframe.WorldObjectPropertyFrame;
import se.webbzon.boltzmann.editor.propertyframe.WorldStaticObjectPropertyFrame;
import se.webbzon.boltzmann.game.object.item.GameItemContainer;
import se.webbzon.oschi01.worldobject.WorldObject;

public class GameItemContainerPropertyFrameFactory implements PropertyFrameFactory {

	/*============================================================
	Public Methods
	============================================================*/
	
	@Override public String getWorldObjectName() {
		return GameItemContainer.worldObjectName;
	}

	@Override public WorldObjectPropertyFrame makePropertyFrame(EditorModel model,
																WorldObject instance) {
		
		return new PropertyFrameImpl(model, (GameItemContainer) instance);
	}
	
	/*============================================================
	Private Classes
	============================================================*/
	
	private static final class PropertyFrameImpl extends WorldStaticObjectPropertyFrame {
		
		// The item list associated with this game item container
		private final ItemList itemList;
		
		/*============================================================
		Constructors
		============================================================*/
		
		public PropertyFrameImpl(EditorModel model, GameItemContainer instance) {
			super(model, instance);
			
			itemList = new ItemList(instance.getItem());
			addPanel(itemList.getName(),itemList);
			
			initialize();
		}
		
		/*============================================================
		Public Methods
		============================================================*/
		
		@Override public boolean apply(Collection<String> errorMessages) {
			if (super.apply(errorMessages)) {
				GameItemContainer container = (GameItemContainer) getInstance();
				container.setItem(itemList.getItem());
				return true;
			} else
				return false;
		}
		
	}

}
